package com.mjt.dongbao.common.util.JwtUtil;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

/**
 * @Description
 * @Author mjt
 * @Time 2021/12/31
 */
public class JwtUtil {
    // 生成 token 的盐
    private static String secret = "salt";

    /**
     * subject：用户属性
     * 根据指定属性 + 指定字符串 生成 token
     * （也就是对指定属性加盐）
     */
    public static String createToken(String subject){

        /**
         * setSubject: 指定要加盐的属性
         * signWith：指定加密方式和要加的盐
         * setExpiration：设置 token 过期时间 （1000 为 1 秒）
         */
        String token = Jwts.builder().setSubject(subject)
                .signWith(SignatureAlgorithm.HS256, secret)
                .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60))
                .compact();

        return token;
    }

    /**
     * 解析 token，得到 token 中的信息，如用户名、头像等等
     * 根据解析出来的属性值才能做业务判断，比如添加购物车时要知道往谁的购物车中添加
     */
    public static String parseToken(String token){
        // 解析后的 token
        Claims parseResult = Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();

        // 从解析结果中获取属性
        String subject = parseResult.getSubject();
        return subject;
    }

}
